package sortalg

import "fmt"

/**
折半插入排序
*/

type BubbleSort struct {
	keyList []int
}

func NewBubbleSort(sourceList []int) *BubbleSort {
	bis := &BubbleSort{
		keyList: sourceList,
	}

	return bis.insertSort()
}

/**
冒泡排序
*/
func (bis *BubbleSort) insertSort() *BubbleSort {
	for i := len(bis.keyList) - 1; i >= 0; i-- {
		flag := false //标签记录剩余序列是否有序
		for j := 0; j < i; j++ {
			if bis.keyList[j] > bis.keyList[j+1] {
				tmp := bis.keyList[j]
				bis.keyList[j] = bis.keyList[j+1]
				bis.keyList[j+1] = tmp
				flag = true
			}
		}

		if !flag {
			break
		}
	}

	return bis
}

func (bis *BubbleSort) Print() {
	fmt.Println(bis.keyList)
}
